#include "App_Task.h"

void startTask(void *);
#define START_TASK_NAME "start_task"
#define START_TASK_STACK_DEP 128
#define START_TASK_PRIORITY 10

TaskHandle_t startTaskHandle;

void oled_task(void *);
#define OLED_TASK "task1"
#define OLED_TASK_STACK_DEP 128
#define OLED_TASK_PRIORITY 6
#define OLED_TASK_EXEC_CYCLE 10
TaskHandle_t oledTaskHandle;

void App_Task_Start(void)
{
    debug_printfln("App_Task_Start");
    // 初始化OLED
    debug_printfln("OLED_Init");
    OLED_Init();
    debug_printfln("OLED_InitSuccess!");
    /* 1. 创建一个启动任务 , 在启动任务内部, 创建其他的功能性的任务*/
    BaseType_t r = xTaskCreate(
        startTask,            /* 任务函数  */
        START_TASK_NAME,      /* 任务名 */
        START_TASK_STACK_DEP, /* 栈的深度  128 * 4 = 512字节 */
        (void *)NULL,         /* 传给任务函数的参数 */
        START_TASK_PRIORITY,  /* 任务的优先级 */
        &startTaskHandle);    /* 任务句柄 */
    if (r == pdPASS)
    {
        debug_printfln("start task create success");
    }
    else
    {
        debug_printfln("start task create failed");
    }

    /* 2. 启动任务调度器 */
    vTaskStartScheduler();
}
void startTask(void *param)
{
    OLED_Init();
    debug_printfln("start task is running");
    /* 创建其他的任务1 */
    xTaskCreate(
        oled_task,
        OLED_TASK,
        OLED_TASK_STACK_DEP,
        (void *)NULL,
        OLED_TASK_PRIORITY,
        &oledTaskHandle);
    debug_printfln("task1 create success!");
    /* 删除自己 */
    vTaskDelete(NULL); /* 传入NULL, 表示删除自己 */
}
void oled_task(void *pram)
{
    TickType_t time = xTaskGetTickCount();

    Inf_TW51_OLED();

    while (1)
    {
        vTaskDelayUntil(&time, OLED_TASK_EXEC_CYCLE);
    }
}
